## [lockf() — Record locking on files](https://www.ibm.com/docs/en/zos/2.2.0?topic=functions-lockf-record-locking-files)
Формат

    #define _XOPEN_SOURCE_EXTENDED 1
    #include <unistd.h>

    int lockf(int filedes, int function, off_t size);

Общее описание

Функция lockf() позволяет блокировать разделы файла блокировками консультативного режима. Вызовы lockf() из других процессов, которые пытаются заблокировать заблокированный раздел файла, либо возвращают значение ошибки, либо блокируют его до тех пор, пока раздел не станет разблокированным. Все блокировки для процесса удаляются, когда процесс завершается. Блокировка записей с помощью функции lockf() поддерживается для обычных файлов.

Аргумент filedes - это открытый файловый дескриптор. Файловый дескриптор должен быть открыт с разрешением только на запись (O_WRONLY) или с разрешением на чтение / запись (O_RDWR), чтобы установить блокировку с помощью этой функции.

Аргумент функции - это управляющее значение, которое определяет действие, которое должно быть выполнено. Допустимые значения для функции определяются в <unistd.h> следующим образом:

    Function   Description
    ------------------------------------------------------
    F_ULOCK    unlock locked sections
    F_LOCK     lock a section for exclusive use
    F_TLOCK    test and lock a section for exclusive use
    F_TEST     test a section for locks by other processes

F_TEST определяет, присутствует ли блокировка другим процессом в указанном разделе; F_LOCK и F_TLOCK блокируют раздел файла, если этот раздел доступен; F_ULOCK удаляет блокировки из раздела файла.

Аргумент size — это количество смежных байтов, которые должны быть заблокированы или разблокированы. Блокируемый или разблокируемый раздел начинается с текущего смещения в файле и продолжается вперед для положительного размера или назад для отрицательного размера (предыдущие байты до, но не включая текущее смещение). Если размер равен 0, блокируется участок от текущего смещения до максимально возможного смещения файла (то есть от текущего смещения до настоящего или любого будущего конца файла (EOF)). Нет необходимости выделять область для файла, который будет заблокирован, поскольку блокировки могут существовать после конца файла.

Разделы, заблокированные с помощью F_LOCK или F_TLOCK, могут полностью или частично содержать или содержаться ранее заблокированным разделом для того же процесса. Когда это происходит, или если возникают соседние заблокированные разделы, разделы объединяются в один заблокированный раздел. Если запрос приведет к тому, что количество блокировок превысит установленный системой предел, запрос завершится неудачей.

Запросы F_LOCK и F_TLOCK отличаются только действием, выполняемым, если раздел недоступен. F_LOCK блокирует вызывающий процесс до тех пор, пока раздел не станет доступен. F_TLOCK приводит к сбою функции, если раздел уже заблокирован другим процессом.

Блокировки файлов снимаются при первом закрытии процессом блокировки любого файлового дескриптора для файла.